export interface IPool {
    reset?(): void;
}

export interface IDispose {

    dispose(): void;
}

export interface IDestroy {

    destroy(): void;
}

export interface ICallBack {
    caller?: any,
    method?: Function,
    arges?: any[]
}


export interface IContext {

    /**初始化执行一次 */
    initialize(): void;

    /**整点报时 */
    onClock(time: number): void;

    /**每秒执行一次 */
    onTimeLoop(): void;

    /**每帧执行一次 */
    onTimeLoopFrame(): void;

    /**游戏开始，所有数据加载完成并登录之后（module有可能在登录之后实列，这样就不会触发此方法） */
    onGameStart(): void;

    /**退出游戏/游戏切换后台时执行 */
    onGameHide(): void;
}


export interface IUIContext<D = any> {

    /**首次实列执行 */
    initialize(): void

    /**打开页面执行一次 */
    onOpen(data?: D): void

    /**关闭页面执行一次 */
    onClose(reaskon?: string): void

    /**销毁页面执行一次 */
    onDispose(): void

}

export type IModule = Partial<IContext>;

export type IUI<D = any> = Partial<IUIContext<D>>;

export type IKey = string | number | Symbol;

export type IPos = { x: number, y: number };
